Skip to content

🏗️(front) replace Next.js with Vite and React Router#607

Open
providenz wants to merge 1 commit into
mainfrom
providenz/get-rid-of-next
Open

🏗️(front) replace Next.js with Vite and React Router#607
providenz wants to merge 1 commit into
mainfrom
providenz/get-rid-of-next

Conversation

@providenz

@providenz providenz commented Jul 22, 2026

Copy link
Copy Markdown
Collaborator

Purpose

The frontend was built with Next.js but used almost none of it: no server rendering, no API routes, no server components. It shipped as a static export,which meant paying for the framework build pipeline while getting a plain single-page app in return. That mismatch made the dev server slow to start,the routing conventions confusing, and the trailing-slash behavior of the export leaked into the backend redirect logic.

This replaces the framework with Vite and React Router, which is what the app was already behaving like.

Proposal

  • Build the frontend with Vite and serve it as a single-page app
  • Declare the routes explicitly with react rrouter rather than by file layout
  • Move the page metadata to the native react mechanism
  • Run the test suite
  • Rename the build-time environment variables to the vite prefix, in the app, the container images, the deployment values and the documentation
  • Let nginx fall back to the app entry point for every route, so deep links and unknown paths are handled by the client router

@coderabbitai

coderabbitai Bot commented Jul 22, 2026

Copy link
Copy Markdown

Important

Review skipped

Too many files!

This PR contains 102 files, which is 2 over the limit of 100.

To get a review, narrow the scope:
• coderabbit review --committed # exclude uncommitted changes
• coderabbit review --dir # limit to a subdirectory
• coderabbit review --base # compare against a closer base

Upgrade to a paid plan to raise the limit.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro

Run ID: b0d0a988-3954-420f-b036-38ecdcd98f99

📥 Commits

Reviewing files that changed from the base of the PR and between 98ccc24 and cc70564.

⛔ Files ignored due to path filters (1)
  • src/frontend/yarn.lock is excluded by !**/yarn.lock, !**/*.lock
📒 Files selected for processing (115)
  • CHANGELOG.md
  • README.md
  • docs/env.md
  • docs/examples/conversations.values.yaml
  • docs/system-requirements.md
  • src/backend/core/authentication/views.py
  • src/backend/core/tests/authentication/test_views.py
  • src/frontend/Dockerfile
  • src/frontend/apps/conversations/.env
  • src/frontend/apps/conversations/.env.development
  • src/frontend/apps/conversations/.env.test
  • src/frontend/apps/conversations/.gitignore
  • src/frontend/apps/conversations/.prettierignore
  • src/frontend/apps/conversations/README.md
  • src/frontend/apps/conversations/conf/default.conf
  • src/frontend/apps/conversations/eslint.config.mjs
  • src/frontend/apps/conversations/index.html
  • src/frontend/apps/conversations/jest.config.ts
  • src/frontend/apps/conversations/jest.setup.ts
  • src/frontend/apps/conversations/jest/mocks/ComponentMock.js
  • src/frontend/apps/conversations/jest/mocks/fileMock.js
  • src/frontend/apps/conversations/jest/mocks/svg.js
  • src/frontend/apps/conversations/next-env.d.ts
  • src/frontend/apps/conversations/next.config.js
  • src/frontend/apps/conversations/package.json
  • src/frontend/apps/conversations/src/App.tsx
  • src/frontend/apps/conversations/src/api/__tests__/config.test.ts
  • src/frontend/apps/conversations/src/api/__tests__/helpers.test.tsx
  • src/frontend/apps/conversations/src/api/config.ts
  • src/frontend/apps/conversations/src/components/Link.tsx
  • src/frontend/apps/conversations/src/components/Loader.tsx
  • src/frontend/apps/conversations/src/components/__tests__/Link.test.tsx
  • src/frontend/apps/conversations/src/components/quick-search/__tests__/QuickSearchResultItem.test.tsx
  • src/frontend/apps/conversations/src/core/AppProvider.tsx
  • src/frontend/apps/conversations/src/core/config/ConfigProvider.tsx
  • src/frontend/apps/conversations/src/core/config/__tests__/ConfigProvider.test.tsx
  • src/frontend/apps/conversations/src/core/settings.ts
  • src/frontend/apps/conversations/src/custom-next.d.ts
  • src/frontend/apps/conversations/src/features/auth/__tests__/silentLogin.test.ts
  • src/frontend/apps/conversations/src/features/auth/components/ActivationPage.tsx
  • src/frontend/apps/conversations/src/features/auth/components/Auth.tsx
  • src/frontend/apps/conversations/src/features/auth/hooks/__tests__/useAuth.test.tsx
  • src/frontend/apps/conversations/src/features/auth/hooks/useAuth.tsx
  • src/frontend/apps/conversations/src/features/banner/__tests__/StatusBanner.test.tsx
  • src/frontend/apps/conversations/src/features/chat/api/__tests__/useAssistantHealth.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/Chat.tsx
  • src/frontend/apps/conversations/src/features/chat/components/ChatError.tsx
  • src/frontend/apps/conversations/src/features/chat/components/ModelSelector.tsx
  • src/frontend/apps/conversations/src/features/chat/components/SourceItem.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/ChatError.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/ImageProcessingUnavailableBanner.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/InputChat.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/InputChatAction.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/MessageBlock.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/MessageEnergyIndicator.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/MessageItem.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/ProjectWelcomeMessage.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/SourceItem.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/SuggestionCarousel.test.tsx
  • src/frontend/apps/conversations/src/features/chat/components/__tests__/ToolInvocationItem.test.tsx
  • src/frontend/apps/conversations/src/features/chat/hooks/__tests__/useFileDragDrop.test.tsx
  • src/frontend/apps/conversations/src/features/chat/hooks/__tests__/useFileUrls.test.tsx
  • src/frontend/apps/conversations/src/features/footer/Footer.tsx
  • src/frontend/apps/conversations/src/features/header/components/ButtonToggleLeftPanel.tsx
  • src/frontend/apps/conversations/src/features/header/components/Header.tsx
  • src/frontend/apps/conversations/src/features/header/components/LaGaufre.tsx
  • src/frontend/apps/conversations/src/features/home/components/HomeHeader.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/ModalRemoveConversation.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/__tests__/ConversationItemActions.test.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/__tests__/LeftPanelConversationItem.test.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/__tests__/ModalRenameConversation.test.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanel.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelConversations.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelHeader.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelProjectItem.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelProjects.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelSearch.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/LeftPanelSearchModal.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/left-panel/__tests__/LeftPanelProjectItem.test.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/projects/ModalProjectForm.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/projects/ModalRemoveProject.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/projects/__tests__/ModalProjectForm.test.tsx
  • src/frontend/apps/conversations/src/features/left-panel/components/projects/__tests__/ModalRemoveProject.test.tsx
  • src/frontend/apps/conversations/src/features/maintenance/components/MaintenancePage.tsx
  • src/frontend/apps/conversations/src/features/onboarding/components/OnboardingModal.tsx
  • src/frontend/apps/conversations/src/features/onboarding/components/__tests__/OnboardingButton.test.tsx
  • src/frontend/apps/conversations/src/globals.css
  • src/frontend/apps/conversations/src/layouts/__tests__/MainLayout.test.tsx
  • src/frontend/apps/conversations/src/main.tsx
  • src/frontend/apps/conversations/src/pages/401.tsx
  • src/frontend/apps/conversations/src/pages/403.tsx
  • src/frontend/apps/conversations/src/pages/404.tsx
  • src/frontend/apps/conversations/src/pages/_app.tsx
  • src/frontend/apps/conversations/src/pages/_document.tsx
  • src/frontend/apps/conversations/src/pages/activation/index.tsx
  • src/frontend/apps/conversations/src/pages/chat/[id]/index.tsx
  • src/frontend/apps/conversations/src/pages/chat/conversation.tsx
  • src/frontend/apps/conversations/src/pages/chat/index.tsx
  • src/frontend/apps/conversations/src/pages/home/index.tsx
  • src/frontend/apps/conversations/src/pages/index.tsx
  • src/frontend/apps/conversations/src/pages/login/index.tsx
  • src/frontend/apps/conversations/src/pages/unauthorized.tsx
  • src/frontend/apps/conversations/src/services/PosthogAnalytic.tsx
  • src/frontend/apps/conversations/src/stores/useSentryStore.tsx
  • src/frontend/apps/conversations/src/tests/utils.tsx
  • src/frontend/apps/conversations/src/types/next.ts
  • src/frontend/apps/conversations/src/vite-env.d.ts
  • src/frontend/apps/conversations/stylelint.config.js
  • src/frontend/apps/conversations/tsconfig.json
  • src/frontend/apps/conversations/vite.config.ts
  • src/frontend/apps/conversations/vitest.setup.ts
  • src/frontend/packages/eslint-config-conversations/package.json
  • src/frontend/packages/eslint-config-conversations/vite.mjs
  • src/helm/env.d/common/values.conversations.yaml.gotmpl
  • src/helm/env.d/dev-staging/values.conversations.yaml.gotmpl

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • Review on demand using usage pricing
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch providenz/get-rid-of-next

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@providenz
providenz force-pushed the providenz/get-rid-of-next branch from 446db56 to 531530c Compare July 22, 2026 07:38
@providenz
providenz force-pushed the providenz/get-rid-of-next branch from 531530c to cc70564 Compare July 22, 2026 07:46
@sonarqubecloud

Copy link
Copy Markdown

Quality Gate Failed Quality Gate failed

Failed conditions
C Security Rating on New Code (required ≥ A)
C Reliability Rating on New Code (required ≥ A)

See analysis details on SonarQube Cloud

💡 Need a hand with PR review? Try Gitar by Sonar!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant